package com.wanxi.orderApi;

/**
 * @Author LiuYuRong
 * @Date 2022/1/13 20:04
 * @Version 1.0
 * @Description
 */

import com.wanxi.domain.code.ResultCode;
import com.wanxi.domain.vo.OrderQueryVO;
import com.wanxi.domain.vo.OrderVO;
import com.wanxi.domain.vo.Paging;
import com.wanxi.domain.vo.PlaceOrderVO;
import feign.Param;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @Author LiuYuRong
 * @Date 2022/1/13 18:55
 * @Version 1.0
 * @Description
 */
@FeignClient("orderserver")
//@RequestMapping("/order/orderApi")
public interface OrderFeign  {


    /**
     * 用户获得自己的订单数据
     * @param id 必须传入用户id
     * @param page 分页，必须传入
     * @return 这个用户的订单列表
     */
    @GetMapping("/order/api/customer/getCustomerOrdersById/")
    List<OrderVO> getCustomerOrdersById(@RequestParam("id") Long id, Paging page);

    /**
     * 门店获得自己的订单列表
     * @param vo 查询条件，必须传入店铺id
     * @return 门店订单列表
     */
    @GetMapping("/order/api/customer/getShopOrdersById/")
    List<OrderVO> getShopOrdersById(@RequestBody OrderQueryVO vo);

    /**
     * 企业获得自己所有门店的所有订单
     * @param id 查询条件，必须传入企业id
     * @param paging 分页，必须传入
     * @return 企业订单列表
     */
    @GetMapping("/order/api/enterprise/getEnterpriseOrdersById/")
    List<OrderVO> getEnterpriseOrdersById(@RequestParam("id") Long id,@RequestParam("paging") Paging paging) ;


    /**
     * 支付订单
     * @param pid 平台订单id
     * @return 是否成功提示
     */
    @PutMapping("/order/api/pay/{orderId}")
    ResultCode payOrder(@PathVariable("orderId") long pid) ;

    /**
     * 下单
     * @param order 订单下单所需项
     * @return 是否下单成功
     */
    @PostMapping("/order/api/placeOrder/")
    ResultCode addOrder(@RequestBody PlaceOrderVO order) ;

    /**
     * 发货
     * @param orderId 订单id
     * @return 是否成功
     */
    @PutMapping("/order/api/send/{orderId}")
    ResultCode send(@PathVariable("orderId") long orderId) ;

    /**
     * 用户收货
     * @param orderId 订单id
     * @return 是否成功
     */
    @PutMapping("/order/api/received/{orderId}")
    ResultCode receive(@PathVariable("orderId") long orderId);

    /**
     * 自动取消订单
     * @param orderId 订单id
     * @return 是否操作成功提示
     */
    @PutMapping("/order/api/autocancel/{orderId}")
    ResultCode autoCancel(@PathVariable("orderId") long orderId) ;

    /**
     * 手动取消订单
     * @param orderId
     * @return
     */
    @PutMapping("/order/api/handlecancel/{orderId}")
    ResultCode handleCancel(@PathVariable("orderId") long orderId);

    /**
     * 删除订单，c端调用
     * @param orderId 订单id
     * @return 是否操作成功提示
     */
    @DeleteMapping("/order/api/delete/{orderId}")
    ResultCode deleteOrderById(@PathVariable("orderId") long orderId) ;

    /**
     * 提交订单前的工作，包括计算订单总金额或者优惠金额（如果使用了优惠券）
     * @param orderVO 订单视图
     * @return 订单总金额和优惠金额（如果使用了优惠券）例如{“amount”:"152.00"}这种形式
     */
    @PostMapping("/order/api/beforeSubmitOrder/")
    Map<String, Object> beforeSubmitOrder(@RequestBody PlaceOrderVO orderVO) ;
}

